package cn.cdeden.aiqa.controller;

import cn.cdeden.aiqa.domain.WikiApp;
import cn.cdeden.aiqa.domain.WikiAppPerm;
import cn.cdeden.aiqa.domain.bo.AssignPermissionsRequest;
import cn.cdeden.aiqa.domain.vo.WikiAppCount;
import cn.cdeden.aiqa.service.WikiAppService;
import cn.cdeden.common.core.domain.R;
import cn.cdeden.common.core.utils.page.TableDataInfo;
import cn.cdeden.common.mybatis.core.page.PageQuery;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * @Author : Nick
 * @Description : 知识库-应用接口
 * @Date : 2024/7/16
 */
@Controller
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/wiki/apps")
public class WikiAppController {

    private final WikiAppService wikiAppService;

    /**
     * 知识库-应用：创建应用
     */
    @PostMapping("/create")
    public R<WikiApp> createWikiApp(@RequestBody WikiApp wikiApp) {
        WikiApp createdApp = wikiAppService.createWikiApp(wikiApp);
        return R.ok(createdApp);
    }

    /**
     * 知识库-应用：修改应用
     */
    @PutMapping("/update")
    public R<Void> updateWikiApp(@RequestBody WikiApp wikiApp) {
        wikiAppService.updateWikiApp(wikiApp);
        return R.ok();
    }

    /**
     * 知识库-应用：删除多个应用
     */
    @DeleteMapping("/delete")
    public R<Void> deleteWikiApps(@RequestBody List<Long> ids) {
        wikiAppService.deleteWikiApps(ids);
        return R.ok();
    }

    /**
     * 知识库-应用：分页查询应用
     */
    @GetMapping("/list")
    public TableDataInfo<WikiApp> getAllWikiApps(@RequestParam(required = false) String appName, PageQuery pageQuery) {
        return wikiAppService.getAllWikiApps(appName, pageQuery);
    }

    /**
     * 知识库-应用：获取应用权限信息
     */
    @GetMapping("/{appId}/permissions")
    public R<List<WikiAppPerm>> getAppPermissions(@PathVariable Long appId) {
        List<WikiAppPerm> permissions = wikiAppService.getAppPermissions(appId);
        return R.ok(permissions);
    }

    /**
     * 知识库-应用：分配应用权限
     */
    @PostMapping("/{appId}/assignPermissions")
    public R<Void> assignPermissions(
            @PathVariable Long appId,
            @RequestBody AssignPermissionsRequest request) {
        wikiAppService.assignPermissions(appId, request);
        return R.ok();
    }

    /**
     * 知识库-应用：获取当前用户有权限的应用
     */
    @GetMapping("/authorized")
    public R<List<WikiApp>> getAuthorizedApps(
            @RequestParam Long deptId,
            @RequestParam Long userId,
            @RequestParam String wikiType){
        List<WikiApp> authorizedApps = wikiAppService.getAuthorizedApps(deptId, userId,wikiType);
        return R.ok(authorizedApps);
    }

    /**
     * 通过dataSetId获取应用
     * @param dataSetId
     * @return
     */
    @GetMapping("/getAuthorizedByDataSetId")
    public R<WikiApp> getAuthorizedApps(
        @RequestParam String dataSetId){
        WikiApp wikiApp = wikiAppService.getgetAuthorizedAppByDataSetId(dataSetId);
        return R.ok(wikiApp);
    }

    /**
     * 知识库-应用：增加问答次数
     */
    @PostMapping("/cr_count")
    public R<Void> crCount(
        @RequestParam Long appId){
        wikiAppService.crCount(appId);
        return R.ok();
    }

    /**
     * 知识库-应用：统计使用频率
     */
    @GetMapping("/count_info")
    public R<WikiAppCount> crCountInfo(){
        return R.ok(wikiAppService.crCountInfo());
    }

}
